/**
 * Copyright &copy; 2012-2014 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
 */
package com.training1.core.common.global;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.DefaultResourceLoader;

import com.training1.core.common.utils.StringUtils;
import com.training1.core.common.utils.framework.PropertiesLoader;
import com.training1.core.common.utils.pay.bohai.BoHaiHelp;

/**
 * 全局配置类
 * @author ThinkGem
 * @version 2014-06-25
 */
public class Global implements InitializingBean{

	/**
	 * 当前对象实例
	 */
	private static Global global;
	
	private static Message message;
	
	private static BoHaiHelp boHaiHelp;
	
	/**
	 * 属性文件加载对象
	 */
	private static PropertiesLoader loader;
	
	private String[] resourcesPaths;
	
	private Integer branchId;
	
	/**
	 * 保存全局属性值
	 */
	private static Map<String, String> map = new HashMap<String, String>();
	
	/**
	 * 显示/隐藏
	 */
	public static final String SHOW = "1";
	public static final String HIDE = "0";

	/**
	 * 是/否
	 */
	public static final String YES = "1";
	public static final String NO = "0";
	
	/**
	 * 对/错
	 */
	public static final String TRUE = "true";
	public static final String FALSE = "false";
	
	
	/**
	 * 获取当前对象实例
	 */
	public static Global getInstance() {
		return global;
	}
	
	/**
	 * 获取配置
	 * @see ${fns:getConfig('adminPath')}
	 */
	public static String getConfig(String key) {
		String value = map.get(key);
		if (value == null){
			value = loader.getProperty(key);
			map.put(key, value != null ? value : StringUtils.EMPTY);
		}
		return value;
	}
	
    public static Integer getBranchRoleId(){
    	return getInstance().branchId;
    }
	
	/**
	 * 页面获取常量
	 * @see ${fns:getConst('YES')}
	 */
	public static Object getConst(String field) {
		try {
			return Global.class.getField(field).get(null);
		} catch (Exception e) {
			// 异常代表无配置，这里什么也不做
		}
		return null;
	}


	
    /**
     * 获取工程路径
     * @return
     */
    public static String getProjectPath(){
    	// 如果配置了工程路径，则直接返回，否则自动获取。
		String projectPath = Global.getConfig("projectPath");
		if (StringUtils.isNotBlank(projectPath)){
			return projectPath;
		}
		try {
			File file = new DefaultResourceLoader().getResource("").getFile();
			if (file != null){
				while(true){
					File f = new File(file.getPath() + File.separator + "src" + File.separator + "main");
					if (f == null || f.exists()){
						break;
					}
					if (file.getParentFile() != null){
						file = file.getParentFile();
					}else{
						break;
					}
				}
				projectPath = file.toString();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return projectPath;
    }

    
	public String[] getResourcesPaths() {
		return resourcesPaths;
	}

	public void setResourcesPaths(String[] resourcesPaths) {
		this.resourcesPaths = resourcesPaths;
	}

	public static String getMessage(String key){
		return message.getMessage(key);
	}
	
	public static String getMessage(String suffix,String... prefix){
		return message.getMessage(suffix,prefix);
	}
	
	@Override
	public void afterPropertiesSet() throws Exception {
		global = SpringContextHolder.getBean(Global.class);
		message = SpringContextHolder.getBean(Message.class);
		synchronized (global) {
			loader = new PropertiesLoader(global.resourcesPaths);
		}
		boHaiHelp = new BoHaiHelp();
		boHaiHelp.afterPropertiesSet();
		global.branchId = Integer.valueOf(getConfig("branch.role.id"));
	}
	
	public static BoHaiHelp getBoHaiHelp() {
		return boHaiHelp;
	}

}
